package org.dfg.corejava.jdk8.lumbda;

import java.util.Optional;

/**
 * Java 8 拥有一个新的称为Optional的模板，用于封装可能为null的引用。 它绝不能避免null，
 * 它更是一种方式－让API设计者从代码级别(而不是文档级别)表明一个null值可能会传入一个方法或从一个方法中返回, 
 * 以让调用者为null值做好准备
 * @author DingFugui
 */
public class TestOptional {
	public static void main(String[] args) {
		Optional<Computer> c = Optional.empty();
		String s = c.flatMap(Computer::getUsb).flatMap(Usb::getMouse)
				.map(Mouse::getVersion).orElse("3.0");
		System.out.println(s);
	}
}

class Computer {
	private Optional<Usb> usb;

	public Optional<Usb> getUsb() {
		return usb;
	}
}

class Usb {
	private Optional<Mouse> mouse;

	public Optional<Mouse> getMouse() {
		return mouse;
	}
}

class Mouse {
	private String version;

	public String getVersion() {
		return version;
	}
}
